package Student学生管理;

import java.util.ArrayList;
import java.util.Scanner;

/*1.4主界面的代码编写
思路
用输出语句完成主界面的编写
用Scanner实现键盘录入数据
用switch语句完成操的选择
用循环完成再次回到主界面
*/
public class zhujiemian {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<Student> arr = new ArrayList<>();
        while (true) {
            System.out.println("--------欢迎来到学生管理系统--------");
            System.out.println("1、添加学生");
            System.out.println("2、删除学生");
            System.out.println("3、修改学生");
            System.out.println("4、查看学生");
            System.out.println("5、退出");
            System.out.println("请输入你的选择");
            Scanner sc = new Scanner(System.in);
            int num = sc.nextInt();
            switch (num) {
                case 1:
                    Studentadd(arr);
                    break;
                case 2:
                    Studentdedelete(arr);
                    break;
                case 3:
                    Studentupdate(arr);
                    break;
                case 4:
                    Studentdelook(arr);
                    break;
                case 5:
                    System.out.println("谢谢使用");
                    System.exit(0);//JVM 退出虚拟机推出
            }
        }
    }

    /*1.5添加学生的代码编写
    思路
    ①用键盘录入选择添加学生
    ②定义一个方法，用于添加学生
            ①显示提示信息，提示要输入何种信息
            ②键盘录入学生对象所需要的数据
            ③创建学生对象，把键盘录入的数据赋值给学生对象的成员变量
            ④将学生对象添加到集合中（保存）
            ⑤给出添加成功提示
    ③调用方法
    */
    public static void Studentadd(ArrayList<Student> arr) {

        Scanner sc = new Scanner(System.in);
        Scanner sc1 = new Scanner(System.in);
        System.out.println("请输入你要添加的学生人数");
        int num = sc.nextInt();
        int st = 1;
        for (int i = 0; i < num; i++, st++) {


            System.out.println("请输入学生" + st + "的学号");
            String id = sc1.nextLine();

            //调用方法判断添加信息与内部信息是否相同
            boolean boo = Studentisuse(arr, id);
            if (boo) {
                System.out.println("你输入的学号已被占用，请重新输入");
                break;
            }
            System.out.println("请输入学生" + st + "的姓名");
            String name = sc1.nextLine();
            System.out.println("请输入学生" + st + "的年龄");
            String age = sc1.nextLine();
            System.out.println("请输入学生" + st + "的居住地");
            String live = sc1.nextLine();
            //创建学生对象，把键盘录入的数据赋值到对象的成员变量里面
            Student s = new Student();
            s.setId(id);
            s.setName(name);
            s.setAge(age);
            s.setLive(live);
            //将输入的信息传到集合里面
            arr.add(s);
            System.out.println("添加成功。");
        }
    }

    /*思路
    首先要判断集合里面是否有数据
    ①用键盘录入选择查看所有学生信息
    ②定义一个方法，用于查看学生信息
    ①显示表头信息
    ②
    将集合中数据取出按照对应格式显示学
    生信息，年龄显示补充“岁”
    ③
    调用方法
    */
//下面是升级版
    public static void Studentdelook(ArrayList<Student> arr) {
        if (arr.size() != 0) {
            System.out.println("学号\t\t姓名\t\t年龄\t\t居住地");
            for (int i = 0; i < arr.size(); i++) {
                Student student = arr.get(i);
                //Student s = new Student();
                student = student;
                System.out.println(student.getId() + "\t\t" +
                        student.getName() + "\t\t" +
                        student.getAge() + "岁\t\t" +
                        student.getLive());
            }
        }
        System.out.println("无信息，请先添加信息");
    }

    /*1.8删除学生的代码编写
 思路
 ①用键盘录入选择删除学生信息
 定义一个方法，用于删除学生信息
 ①显示提示信息
 ②键盘录入要删除的学生学号
 ③遍历集合将对应学生对像从集合中删除
 ④给出删除成功提示
 */
    public static void Studentdedelete(ArrayList<Student> arr) {
        System.out.println("请输入需要删除学生的学号");
        Scanner sc = new Scanner(System.in);
        String de = sc.nextLine();
        int index = -1;
        //遍历集合将对应的学生对象从集合中删除
        for (int i = 0; i < arr.size(); i++) {
            Student student = arr.get(i);
            if (student.getId().equals(de)) {
                index = i;
                break;
            }
        }
        if (index == -1) {
            System.out.println("该信息不存在，请重新输入");
        } else {
            arr.remove(index);
            System.out.println("删除学生信息成功");
        }
    }

    /*1.9修改学生的代码编写
思路
①用键盘录入选择修改学生信息
②定义一个方法，用于修改学生信息
    显示提示信息
    键盘录入要修改的学生学号
    键盘录入要修改的学生信息
    遍历集合修改对应的学生信息
    给出修改成功提示
③调用方法
*/
    public static void Studentupdate(ArrayList<Student> arr) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生学号");
        String id = sc.nextLine();
       /* 判断用户所要删除的学生id是否存在
       for (int i=0;i<arr.size();i++){
            Student ide=arr.get(i);
            for (int j = 0; j < arr.size(); j++) {
            Student ide = arr.get(j);
            if (ide.getId().equals(id)) {
                int in = -1;break;
            }
            if(index==-1){
                System.out.println("该信息不存在，无法修改");
            }else{

            }
        }*/
        int index = -1;
        for (int i = 0; i < arr.size(); i++) {
            Student student = arr.get(i);
            if (student.getId().equals(id)) {
                index = i;
                break;
            }
        }
        if (index == -1) {
            System.out.println("该信息不存在，无法修改");
        } else {
            System.out.println("请输入学生的姓名");
            String name = sc.nextLine();
            System.out.println("请输入学生的年龄");
            String age = sc.nextLine();
            System.out.println("请输入学生的居住地");
            String live = sc.nextLine();

//创建学生对象
            Student s = new Student();
            s.setId(id);
            s.setName(name);
            s.setAge(age);
            s.setLive(live);
//遍历集合修改对应学生信息
            for (int i = 0; i < arr.size(); i++) {
                Student student = arr.get(i);
                if (student.getId().equals(id)) {
                    arr.set(i, s);
                    break;
                }
                System.out.println("修改成功");
            }
        }
    }

    /*1.11解决添加学生学号重复问题
思路
①定义一个方法，对学号是否被使用进行判断
如果与集合中的某一个学生学号相同，返回ture
如果都不相同，返回false
②在添加学生录入学号后调用该方法
①如果返回tue,弹出提示，重新输入学号
②如果返回false,正常添加学生对象*/
    public static boolean Studentisuse(ArrayList<Student> arr, String id) {
        boolean boo = false;
        for (int i = 0; i < arr.size(); i++) {
            Student student = arr.get(i);
            if (student.getId().equals(id)) {
                boo = true;
                break;
            }
        }
        return boo;
    }
}
